home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / gpen32k / source / lib / osrc / rgbhsv.c < prev    next >
Encoding:
Text File  |  1994-06-01  |  1.1 KB  |  66 lines

  1. /*
  2.     RGB to HSV 変換関数
  3.                         おこめ
  4.  
  5.     col:24bitGRB
  6.     ret h:(0,1535) s,v:(0,255)
  7.  
  8.     参考:Oh!FM 1989.9  特集
  9.          爆走!!  趣味のC言語ライブラリ
  10.          Part 6        あれやこれやの
  11.                      MISCライブラリ    歩野零一
  12. */
  13.  
  14. void RGBtoHSV( int col, int *hh, int *ss, int *vv )
  15. {
  16.     int r,g,b,rr,gg,bb, x,h,s,v,t ;
  17. /*    32k colors    */
  18. /*    r = (col >> 2) & 0xf8;
  19.     g = (col >> 7) & 0xf8;
  20.     b = (col << 3) & 0xf8;    */
  21. /*    full color    */
  22.     r = (col >>  8) & 0xff;
  23.     g = (col >> 16) & 0xff;
  24.     b =  col        & 0xff;
  25.  
  26.     v = _max( r, g, b );
  27.     x = _min( r, g, b );
  28.     t = v - x ;
  29.     if ( v != 0 )
  30.         s = t *255 /v ;
  31.     else
  32.         s = 0 ;
  33.     if ( t != 0 )    {
  34.         rr = ( v - r ) *255 /t ;
  35.         gg = ( v - g ) *255 /t ;
  36.         bb = ( v - b ) *255 /t ;
  37.     } else {
  38.         rr = gg = bb = 0 ;
  39.     }
  40.  
  41.     if ( r == v )
  42.     {
  43.         if ( b == x )
  44.             h = 256 - gg ;
  45.         else
  46.             h = 1280 + bb ;
  47.     } else {
  48.         if ( g == v )
  49.         {
  50.             if ( b == x )
  51.                 h = 256 + rr ;
  52.             else
  53.                 h = 768 - bb ;
  54.         } else {
  55.             if ( r == x )
  56.                 h = 768 + gg ;
  57.             else
  58.                 h = 1280 - rr ;
  59.         }
  60.     }
  61.     h %= 1536 ;    /*    h = ( h * 60 ) /256 ; h %= 360 ;    */
  62.     *hh = h;
  63.     *ss = s;
  64.     *vv = v;
  65. }
  66.